#ifndef D_ENGINE_H
#define D_ENGINE_H

#include <string>
#include <vector>
#include <platform.h>

// Modules
#include <modules\system\system_module.h>
#include <modules\graphics\graphics_module.h>
#include <modules\input\input_module.h>
#include <modules\audio\audio_module.h>

// Managers
#include <managers\event\event_manager.h>

// Helpers
#include <helpers\math\math_helper.h>

using namespace DelGE::Modules::System;
using namespace DelGE::Modules::Graphics;
using namespace DelGE::Modules::Input;
using namespace DelGE::Modules::Audio;
using namespace DelGE::Managers::Event;
using namespace DelGE::Helpers::Math;

using namespace std;

namespace DelGE
{
	namespace Helpers
	{
		namespace Game
		{
			class Engine
			{
			private:
				SystemModule* pSystem;
				GraphicsModule* pGraphics;
				AudioModule* pAudio;
				InputModule* pInput;

				SystemWindow* pWindowHandle;

				vector<char> vCharacterBuffer;

			public:
				Engine();
				~Engine();

				SystemModule* GetSystem();
				GraphicsModule* GetGraphics();
				AudioModule* GetAudio();
				InputModule* GetInput();

				void CreateDefaultModules();
				void DestroyDefaultModules();

				void SetWindowHandle(SystemWindow *pWindowHandle);
				SystemWindow* GetWindowHandle();

				int GetMouseX();
				int GetMouseY();
				void SetMousePosition(int iMouseX, int iMouseY);
				char GetChar();
				void PushChar(char cCharacter);
				void FlushChar();

				void Update();
			};
		}
	}
}

#endif